package com.hhs.storage.controller;


import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.hhs.storage.bean.BaseMenu;
import com.hhs.storage.bean.BaseMenuUser;
import com.hhs.storage.bean.InputParam;
import com.hhs.storage.bean.ResponseInfo;
import com.hhs.storage.service.BaseLogsService;
import com.hhs.storage.service.BaseMenuService;
import com.hhs.storage.service.BaseMenuUserService;
import com.hhs.storage.util.StringUtil;
import com.hhs.storage.util.SysUtil;
import org.apache.commons.lang.StringUtils;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * <p>
 * 前端控制器
 * </p>
 *
 * @author shadow
 * @since 2018-09-29
 */
@RestController
@RequestMapping("menu")
public class BaseMenuController {
    @Resource
    private BaseLogsService baseLogsService;
    @Resource
    BaseMenuService jxcMenuService;
    @Resource
    BaseMenuUserService baseMenuUserService;
    @Resource
    HttpServletRequest request;
    @Resource
    BaseMenuService baseMenuService;
    /**
     * 用户登录后 ，初始化用户的菜单
     * @return
     */
    @GetMapping(value = "init" )
    public Map menu(HttpServletRequest request) throws IOException {
        String userId = SysUtil.getLoginUserId(request);
        List<BaseMenu> menulist = new ArrayList<>();
        if(StringUtils.isNotEmpty(userId)) {
            menulist = jxcMenuService.findByUserId(userId);
            menulist = BaseMenu.formatMenu(menulist);
        }
        return ResponseInfo.success(menulist);
    }
    /**
     * 手机端用于已经保存的菜单
     * @return
     */
    @GetMapping(value = "hphasmenu" )
    public Map hphasmenu(HttpServletRequest request) throws IOException {
        String userId = SysUtil.getLoginUserId(request);
        //勾中没有
        List<BaseMenuUser> bmu = baseMenuUserService.list(new QueryWrapper<BaseMenuUser>().eq("user_id_",userId));
        List<String> bumIds=bmu.stream().map(BaseMenuUser::getMenuId).collect(Collectors.toList());
        List<BaseMenu> menus=new ArrayList<>();
        for (String menuid :
                bumIds) {
            BaseMenu baseM = baseMenuService.getById(menuid);
            if(!StringUtil.iszNull(baseM.getHandphoneUrl()))
            menus.add(baseM);
        }
        return ResponseInfo.success(menus);
    }
    /**
     * 手机端用于保存的菜单
     * @return
     */
    @RequestMapping(value = "hpsavemenu" )
    public Map hpsavemenu(InputParam inputParam) throws IOException {
        String userId = SysUtil.getLoginUserId(request);
        //删除
        baseMenuUserService.remove(new QueryWrapper<BaseMenuUser>().eq("user_id_",userId));
        if(!StringUtil.iszNull(inputParam.getId())){
            String[] ids = inputParam.getId().split(",");
            List<BaseMenuUser> listBmu=new ArrayList<>();
            for (String id :
                    ids) {
                BaseMenuUser bmu = new BaseMenuUser();
                bmu.setMenuId(id);
                bmu.setUserId(userId);
                listBmu.add(bmu);
            }
            //加入
            baseMenuUserService.saveOrUpdateBatch(listBmu);
        }
        return ResponseInfo.success(null);
    }
    /**
     * 手机端用于登录初始化菜单
     * @return
     */
    @GetMapping(value = "hpinit" )
    public Map hpinit(HttpServletRequest request) throws IOException {
        String userId = SysUtil.getLoginUserId(request);
        List<BaseMenu> menulist = new ArrayList<>();
        List<BaseMenu> menulist2 = new ArrayList<>();
        List<BaseMenu> menuList3=new ArrayList<>();
        if(StringUtils.isNotEmpty(userId)) {
            menulist = jxcMenuService.findByUserId(userId);
            for (BaseMenu bm :
                    menulist) {
                if(StringUtil.iszNull(bm.getHandphoneUrl())){
                    if(StringUtils.isEmpty(bm.getPid()) || "0".equals(bm.getPid())){
                        menulist2.add(bm);
                    }
                }else{
                    menulist2.add(bm);
                }
            }
            menulist = BaseMenu.formatMenu(menulist2);
            for (BaseMenu bm :
                    menulist) {
                if (bm.getMenus().size() != 0) {
                    menuList3.add(bm);
                }
            }
        }
        return ResponseInfo.success(menuList3);
    }
    /**
     * 用户登录后 ，初始化用户的菜单
     * @return
     */
    @GetMapping(value = "init2" )
    public Object menu2(HttpServletRequest request) throws IOException {
     return   JSON.parse("{\"msg\":\"操作成功\",\"code\":1,\"data\":[{\"name\":\"System\",\"path\":\"/system\",\"hidden\":false,\"redirect\":\"noRedirect\",\"component\":\"Layout\",\"alwaysShow\":true,\"meta\":{\"title\":\"系统管理\",\"icon\":\"system\",\"noCache\":false,\"link\":null},\"children\":[{\"name\":\"User\",\"path\":\"user\",\"hidden\":false,\"component\":\"system/user/index\",\"meta\":{\"title\":\"用户管理\",\"icon\":\"user\",\"noCache\":false,\"link\":null}},{\"name\":\"Role\",\"path\":\"role\",\"hidden\":false,\"component\":\"system/role/index\",\"meta\":{\"title\":\"角色管理\",\"icon\":\"peoples\",\"noCache\":false,\"link\":null}},{\"name\":\"Menu\",\"path\":\"menu\",\"hidden\":false,\"component\":\"system/menu/index\",\"meta\":{\"title\":\"菜单管理\",\"icon\":\"tree-table\",\"noCache\":false,\"link\":null}},{\"name\":\"Dept\",\"path\":\"dept\",\"hidden\":false,\"component\":\"system/dept/index\",\"meta\":{\"title\":\"部门管理\",\"icon\":\"tree\",\"noCache\":false,\"link\":null}},{\"name\":\"Post\",\"path\":\"post\",\"hidden\":false,\"component\":\"system/post/index\",\"meta\":{\"title\":\"岗位管理\",\"icon\":\"post\",\"noCache\":false,\"link\":null}},{\"name\":\"Dict\",\"path\":\"dict\",\"hidden\":false,\"component\":\"system/dict/index\",\"meta\":{\"title\":\"字典管理\",\"icon\":\"dict\",\"noCache\":false,\"link\":null}},{\"name\":\"Config\",\"path\":\"config\",\"hidden\":false,\"component\":\"system/config/index\",\"meta\":{\"title\":\"参数设置\",\"icon\":\"edit\",\"noCache\":false,\"link\":null}},{\"name\":\"Notice\",\"path\":\"notice\",\"hidden\":false,\"component\":\"system/notice/index\",\"meta\":{\"title\":\"通知公告\",\"icon\":\"message\",\"noCache\":false,\"link\":null}},{\"name\":\"Log\",\"path\":\"log\",\"hidden\":false,\"redirect\":\"noRedirect\",\"component\":\"ParentView\",\"alwaysShow\":true,\"meta\":{\"title\":\"日志管理\",\"icon\":\"log\",\"noCache\":false,\"link\":null},\"children\":[{\"name\":\"Operlog\",\"path\":\"operlog\",\"hidden\":false,\"component\":\"monitor/operlog/index\",\"meta\":{\"title\":\"操作日志\",\"icon\":\"form\",\"noCache\":false,\"link\":null}},{\"name\":\"Logininfor\",\"path\":\"logininfor\",\"hidden\":false,\"component\":\"monitor/logininfor/index\",\"meta\":{\"title\":\"登录日志\",\"icon\":\"logininfor\",\"noCache\":false,\"link\":null}}]}]},{\"name\":\"Monitor\",\"path\":\"/monitor\",\"hidden\":false,\"redirect\":\"noRedirect\",\"component\":\"Layout\",\"alwaysShow\":true,\"meta\":{\"title\":\"系统监控\",\"icon\":\"monitor\",\"noCache\":false,\"link\":null},\"children\":[{\"name\":\"Online\",\"path\":\"online\",\"hidden\":false,\"component\":\"monitor/online/index\",\"meta\":{\"title\":\"在线用户\",\"icon\":\"online\",\"noCache\":false,\"link\":null}},{\"name\":\"Job\",\"path\":\"job\",\"hidden\":false,\"component\":\"monitor/job/index\",\"meta\":{\"title\":\"定时任务\",\"icon\":\"job\",\"noCache\":false,\"link\":null}},{\"name\":\"Druid\",\"path\":\"druid\",\"hidden\":false,\"component\":\"monitor/druid/index\",\"meta\":{\"title\":\"数据监控\",\"icon\":\"druid\",\"noCache\":false,\"link\":null}},{\"name\":\"Server\",\"path\":\"server\",\"hidden\":false,\"component\":\"monitor/server/index\",\"meta\":{\"title\":\"服务监控\",\"icon\":\"server\",\"noCache\":false,\"link\":null}},{\"name\":\"Cache\",\"path\":\"cache\",\"hidden\":false,\"component\":\"monitor/cache/index\",\"meta\":{\"title\":\"缓存监控\",\"icon\":\"redis\",\"noCache\":false,\"link\":null}},{\"name\":\"CacheList\",\"path\":\"cacheList\",\"hidden\":false,\"component\":\"monitor/cache/list\",\"meta\":{\"title\":\"缓存列表\",\"icon\":\"redis-list\",\"noCache\":false,\"link\":null}}]},{\"name\":\"Tool\",\"path\":\"/tool\",\"hidden\":false,\"redirect\":\"noRedirect\",\"component\":\"Layout\",\"alwaysShow\":true,\"meta\":{\"title\":\"系统工具\",\"icon\":\"tool\",\"noCache\":false,\"link\":null},\"children\":[{\"name\":\"Build\",\"path\":\"build\",\"hidden\":false,\"component\":\"tool/build/index\",\"meta\":{\"title\":\"表单构建\",\"icon\":\"build\",\"noCache\":false,\"link\":null}},{\"name\":\"Gen\",\"path\":\"gen\",\"hidden\":false,\"component\":\"tool/gen/index\",\"meta\":{\"title\":\"代码生成\",\"icon\":\"code\",\"noCache\":false,\"link\":null}},{\"name\":\"Swagger\",\"path\":\"swagger\",\"hidden\":false,\"component\":\"tool/swagger/index\",\"meta\":{\"title\":\"系统接口\",\"icon\":\"swagger\",\"noCache\":false,\"link\":null}}]},{\"name\":\"Http://ruoyi.vip\",\"path\":\"http://ruoyi.vip\",\"hidden\":false,\"component\":\"Layout\",\"meta\":{\"title\":\"若依官网\",\"icon\":\"guide\",\"noCache\":false,\"link\":\"http://ruoyi.vip\"}}]}");

    }

    @RequestMapping("getAll")
    public Map getAll() throws IOException {
        baseLogsService.log("菜单管理","查询",null);
        QueryWrapper qw =  new QueryWrapper<BaseMenu>();
        qw.eq("state_",1);
        List<BaseMenu> list = jxcMenuService.list(qw);
        list = BaseMenu.formatMenu(list);
        return  ResponseInfo.success(list);
    }

    @PostMapping("edit")
    public Map<String, Object> edit(BaseMenu jxcMenu) {
        if (org.springframework.util.StringUtils.isEmpty(jxcMenu.getId())){
            baseLogsService.log("菜单管理","新增",null);
        }else{
            baseLogsService.log("菜单管理","编辑",null);
        }
        jxcMenuService.saveOrUpdate(jxcMenu);
        return ResponseInfo.success(jxcMenu);
    }

    @DeleteMapping(value = "{id}")
    public Map<String, Object> dele(@PathVariable("id") String id) {
        baseLogsService.log("菜单管理","删除",null);
        return jxcMenuService.dele(id);

    }

    @RequestMapping(value = "{id}", method = RequestMethod.GET)
    public Map<String, Object> findById(@PathVariable("id") String id) {
        BaseMenu jxcMenu = jxcMenuService.getOne(new QueryWrapper<BaseMenu>().eq("id_", id));
        return ResponseInfo.success(jxcMenu);
    }
    @RequestMapping(value = "getByRoleId", method = RequestMethod.GET)
    public Map<String, Object> getByRoleId( String roleId) {
        List<BaseMenu> list = jxcMenuService.findByRoleId(roleId);
        return ResponseInfo.success(list);
    }

}

